import {Component, Input, OnInit} from '@angular/core';
import {CurlInvokeCodeService} from '../../service/lang/curl-invoke-code-service';
import {JavaInvokeCodeService} from '../../service/lang/java-invoke-code-service';
import {JavaScriptInvokeCodeService} from '../../service/lang/javascript-invoke-code-service';
import {InvokeData} from '../../entity/invoke-data';

@Component({
    selector: 'app-invoke-code',
    templateUrl: './invoke-code.component.html',
    styleUrls: ['./invoke-code.component.css']
})
export class InvokeCodeComponent implements OnInit {

    @Input()
    data: InvokeData;

    /**
     * 当前语言
     * @type {string}
     */
    lang = 'cUrl';

    /**
     * 可用语言
     * @type {Array}
     */
    langs = ['cUrl', 'java', 'javascript'];

    private langCodeInvokers = {
        'cUrl': new CurlInvokeCodeService(),
        'java': new JavaInvokeCodeService(),
        'javascript': new JavaScriptInvokeCodeService()
    };

    constructor() {
    }

    ngOnInit() {
    }

    /**
     * 切换语言
     * @param {string[]} lang
     */
    changeLang(lang: string[]) {
        this.lang = lang[0];
    }

    getInvokeCode(): string {
        const langCodeInvoker = this.langCodeInvokers[this.lang];
        if (!langCodeInvoker) {
            return `暂未实现${this.lang}的调用代码！`;
        }

        return langCodeInvoker.getCode(this.data);
    }
}
